package com.java.array;


/**
 * @Author hyx
 * @Description 冒泡排序，选择排序，二分查找
 * @Date 2024/3/3 21:01
 * @Version 1.0
 */
public class ArrayDemo {

    public static void main(String[] args) {
        int[] array = {4,1,5,12,15,18,11,9,21,23,6,9};
        printArray(array);
        System.out.println();
        int[] sortArray = selectSort(array);
        int[] bubsortArray = bubbleSort(array);

        int index = getArrayIndex(9,bubsortArray);
        System.out.println("9对应在数组内的数的角标为"+index);
        printArray(bubsortArray);
    }

    /**
     *  返回key值对应的数组所在的角标
     * @param key
     * @return
     */
    private static int getArrayIndex(int key,int[] array) {
        for(int i=0; i<array.length; i++){
            if(array[i] == key){
                return i;
            }
        }
        return -1;
    }

    /**
     * 冒泡排序原理对数据进行排序
     * @param array  要排序的数组
     * @return 返回已经排序好的数组
     */
    private static int[] bubbleSort(int[] array) {
        for(int x=0; x<array.length; x++){
            //第二次循环，-X代表去除X,-1代表去除最后一个
            for (int y=0; y<array.length-x-1; y++){
                if(array[y] > array[y+1]){
                    swap(y,y+1,array);
                }
            }
        }
        return array;
    }

    /**
     * 输出数组
     * @param sortArray 有序的数组
     */
    public static void printArray(int[] sortArray) {
        System.out.print("[");
        for(int i=0; i<sortArray.length; i++){
            if(i != sortArray.length-1)
                System.out.print( sortArray[i] +",");
            else
                System.out.print( sortArray[i] +"]");

        }
        System.out.println();
    }


    /**
     * 选择排序原理对数据进行排序
     * @param array 输入数组
     * @return  排序后的数组
     */
    protected static int[] selectSort(int[] array) {
        int temp;
        for(int x=0; x<array.length; x++){
            //从角标最小的开始比较，最小的依次选出
            for(int y=x+1; y<array.length; y++){
                if(array[x] > array[y]){
//                    temp = array[x] ;
//                    array[x] =array[y];
//                    array[y] = temp;
                    swap(x, y, array);
                }
            }
        }
        return array;
    }

    /**
     * 数组中的两个角标对应的数值调换
     * @param m
     * @param n
     * @param array
     */
    private static void swap(int m, int n,int[] array) {
        int temp = 0;
        temp = array[m] ;
        array[m] = array[n];
        array[n] = temp;
    }
}
